package com.tanhua.app.service;

import com.alibaba.fastjson.JSON;
import com.tanhua.app.exception.BusinessException;
import com.tanhua.app.exception.ErrorResult;
import com.tanhua.commons.utils.Constants;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
public class UserFreezeService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    //用户冻结判断  根据 用户id 和 冻结类型 判断对应的冻结是否存在，
    //如果存在冻结数据，抛异常，用户就不能继续操作了
    // freezingRange(冻结范围)：  1-冻结登录，2-冻结发言，3-冻结发布动态
    public void freezeCheck(Long userId, String freezingRange) {
        //1 查询redis中的冻结数据
        String json = redisTemplate.opsForValue().get(Constants.USER_FREEZE + userId);

        //2 判断冻结数据是否存在
        if (StringUtils.isNotBlank(json)) {
            Map map = JSON.parseObject(json, Map.class);
            String redisFreezingRange = map.get("freezingRange").toString();

            //3 如果冻结数据存在，根据冻结的范围抛异常
            if (redisFreezingRange.equals(freezingRange) && "1".equals(freezingRange)) {
                //冻结登录
                throw new BusinessException(ErrorResult.freezeLoginError());
            }
            if (redisFreezingRange.equals(freezingRange) && "2".equals(freezingRange)) {
                //冻结发言
                throw new BusinessException(ErrorResult.freezeSpeakError());
            }
            if (redisFreezingRange.equals(freezingRange) && "3".equals(freezingRange)) {
                // 冻结发布动态
                throw new BusinessException(ErrorResult.freezeMovementError());
            }
        }

    }
}
